package com.example.demo.binary;

/**
 * @author Smile to life
 */
public class BinaryDemo {

    /**
     * 原码：第一位为符号位，0表示正数，1表示负数，例如：
     * 2的原码：00000000 00000000 00000000 00000010
     * -2的原码：10000000 00000000 00000000 00000010
     * <p>
     * 反码：正数的反码与原码相同，负数的反码在原码的基础上，符号位不变，其余的按位取反，例如：
     * 2的反码：00000000 00000000 00000000 00000010
     * -2的反码：11111111 11111111 11111111 11111101
     * <p>
     * 补码：正数的补码就是原码本身，负数的补码是它的反码+1，例如：
     * 2的补码：00000000 00000000 00000000 00000010
     * -2的补码：11111111 11111111 11111111 11111110
     * <p>
     * 在Java中，使用补码来表示整数并参与运算，这里简单举例说明表示整数，这里以int类型举例说明（int类型占32位，共4个字节）
     */
    public static void main(String[] args) {

        int x = 4;
        //原码：00000000 00000000 00000000 00000100
        //反码：00000000 00000000 00000000 00000100
        //补码：00000000 00000000 00000000 00000100
        System.out.println(Integer.toBinaryString(x));
        //输出结果：100

        int y = -4;
        //原码：10000000 00000000 00000000 00000100
        //反码：11111111 11111111 11111111 11111011
        //补码：11111111 11111111 11111111 11111100
        System.out.println(Integer.toBinaryString(y));
        //输出结果：11111111111111111111111111111100

        int z = -6;
        //原码： 10000000 00000000 00000000 00000110
        //反码： 11111111 11111111 11111111 11111001
        //补码:  11111111 11111111 11111111 11111010
        System.out.println(Integer.toBinaryString(z));
        //输出结果：11111111111111111111111111111010
    }
}
